import java.util.Arrays;

public class MyArrayList {
    private int[] elem;//用来存放数据元素
    private int usedSized;//用来计算有效数据元素的个数
    public final static  int DEFAULT_SIZE = 10;

    //无参构造方法，初始化默认长度的顺序表
    public MyArrayList(){
        this.elem = new int[DEFAULT_SIZE];
    }
    //将顺序表的底层容量设置为initcapacity
    public  MyArrayList(int initcapacity){
        this.elem = new int[initcapacity];
    }
    //新增元素（默认在数组最后新增）
    public void add(int data){
        //如果满了，则要进行扩容
        if(isFull()){
            //扩容
            Arrays.copyOf(elem,2*elem.length);
        }
        elem[usedSized] = data;
        usedSized++;
    }
    //判断顺序表是否已经满了
    private boolean isFull() {
        if(usedSized >= elem.length){
            return true;
        }
        return false;
    }
    //在pos位置新增元素
    public void add(int pos,int data){
        if(pos < 0 || pos > usedSized){
            throw new RuntimeException("下标位置不合法");
        }
        //如果满了，则要进行扩容
        if(isFull()){
            //扩容
            this.elem = Arrays.copyOf(elem,2*elem.length);
        }
        //从后往前挪动元素
        //这里的pos下标的元素也需要往后挪
        for(int i = usedSized-1;i >= pos;i++){
            elem[i+1] = elem[i];
        }
        //插入pos下标的元素
        elem[pos] = data;
        usedSized++;
    }
    //判定是否包含某个元素
    public boolean contains(int toFind){
        for (int i = 0;i < usedSized;i++){
            if(elem[i] == toFind){
                return true;
            }
        }
        return false;
    }
    //查找某个元素对应的下标
    public int indexOf(int toFind){
        for (int i = 0;i < usedSized;i++){
            if(elem[i] == toFind){
                return i;
            }
        }
        return -1;
    }
  //获取pos位置的元素
  public int get(int pos){
        if(pos < 0||pos >= usedSized){
            throw new RuntimeException(pos +"下标不合法");
        }
        return elem[pos];
  }
  //将pos位置的元素更新为value
    public void set(int pos,int value){
        if(pos < 0||pos >= usedSized){
            throw new RuntimeException(pos +"下标不合法");
        }
        elem[pos] = value;
    }

  //删除第一次出现的关键字key
  public void remove(int toRemove){
        //获取被删除元素的下标
      int index = indexOf(toRemove);
      if(index == -1){
          System.out.println("当前顺序表里没有该数据");
          return;
      }
      for (int i = index;index < usedSized;i++){
          elem[index] = elem[index+1];
      }
      usedSized--;
  }
  //获取顺序表长度
    public int size(){
        return usedSized;
    }
    //打印顺序表
    public void display(){
        for (int i = 0; i < usedSized; i++) {
            System.out.print(elem[i]+" ");
        }
    }
}